﻿//初始化
var sOldAuditorGUID = "";
var sOldAuditorName = "";
var cUserBUGUID = "";
var index = 0;
var requestData = [];
var sFile = "/MyWorkflow/WF_Engine_XmlHttp.aspx"
var divMsg = null;

window.onload = function() {
    //原责任人
    sOldAuditorGUID = $id('__OldAuditorGUID').value;
    sOldAuditorName = $id('__OldAuditorName').value;
    //当前用户所有单位,总部系统管理员为""
    cUserBUGUID = $id('__BUGUID').value;
    //操作进度提示窗
    divMsg = parent.$id("__divRuning");
    divMsg.style.width = "250px";
    divMsg.style.height = "64px";
}

/***********************************
--------------公共函数--------------
************************************/

//查看流程模板或流程信息
function ShowProcessInfo() {
    // 选中行对象数组
    var arrTr = appGrid.frameElement.getSelected();
    if (!arrTr) {
        return;
    }
    var oid = arrTr[0].oid;
    var sFile;
    if ($id("__OperateType").value == "Module") {
        var doctype = arrTr[0].DocumentType;
        var xml = "";
        switch (doctype) {
            case "0":
                xml = "/MyWorkflow/WF_ProcessDefined_Form.xml";
                break;
            case "2":
                xml = "/MyWorkflow/WF_ProcessDefined_Form_Extend.xml";
                break;
            case "1":
                xml = "/MyWorkflow/WF_ProcessDefined_Form_Doc.xml";
                break;
            case "3":
                xml = "/MyWorkflow/WF_ProcessDefined_Form_Doc.xml";
                break;
        }
        sFile = "/MyWorkflow/WF_ProcessDefined_Form.aspx?mode=2&oid=" + escape(oid) + "&xml=" + escape(xml);
    }
    else if ($id("__OperateType").value == "Entity") {
        sFile = "/MyWorkflow/WF_ProcessHandle_Form.aspx?mode=3&oid=" + escape(arrTr[0].NodeGUID);
    }
    else {
        sFile = "/MyWorkflow/WF_ProcessInitiate_Form.aspx?mode=3&oid=" + escape(oid);
    }

    openMyFullWin(sFile);
}

//提交后台处理
//actionType 处理类型 Replace/Jump/Cancel/Delete
//mode 数据模式 Module/Entity/Draft
function oprSubmit(actionType, dataMode, handleXML) {
    var sURL = "/MyWorkflow/WF_Engine_XmlHttp.aspx"
    var retXML = GetDataFromXMLHTTP(sURL, "AUDITORREPLACE", dataMode, actionType, handleXML);
    return retXML;
}

//提交后处理
function AfterSubmit(oid) {
    appGrid.frameElement.Query(oid);
}

//获取操作成功后的处理信息
function getMsg(type) {
    switch (type) {
        case "Jump":
            return "发起人指派操作已成功！";
        case "Cancel":
            return "作废操作已成功！";
        case "Delete":
            return "删除草稿操作已成功！";
    }
}

//操作入口
function doAction(page, action) {
    //开启提示
    divMsg.innerHTML = "<div>正在处理第<span style='font-weight:bold;color:red;'>&nbsp;1&nbsp;</span>个流程（共&nbsp;" + requestData.length + "&nbsp;个）</div><div style='margin-top:4px'>请稍候...</div>";
    divMsg.style.display = "";
    //禁用按钮
    disableButton(page)

    doCollectData(null, { data: null, page: page, action: action, index: 0, count: requestData.length });
}

//循环发送请求处理数据
function doCollectData(response, param) {
    if (response) {
        result = eval(response);
        if (result.status) {
            //判断是否完成
            if (requestData.length == 0) {
                //关闭提示    
                divMsg.style.display = "none";
                //给出提示信息
                alert(getMsg(param.action));
                //启用按钮
                enableButton(param.page);
                //刷新页面
                AfterSubmit();
                return;
            }
        }
        else {
            //询问
            if (!confirm("处理流程“" + result.processName + "”时出错，是否继续后续流程的处理？")) {
                //结束
                requestData.length = 0;
                //启用按钮
                enableButton(param.page);
                //关闭提示    
                divMsg.style.display = "none";
                //刷新页面
                AfterSubmit();
                return;
            }
            //用户选择继续
        }
    }
    //更新数据
    param.data = requestData.shift();
    param.index = param.index + 1;
    //继续请求
    doRequest(param);
}

//发送请求处理数据
function doRequest(param) {
    //更新提示
    divMsg.innerHTML = "<div>正在处理第<span style='font-weight:bold;color:red;'>&nbsp;" + param.index + "&nbsp;</span>个流程（共&nbsp;" + param.count + "&nbsp;个）</div><div style='margin-top:4px'>请稍候...</div>";
    //开始请求
    GetDataFromXmlHTTPAsync(sFile, "AUDITORREPLACE", param.page, param.action, param.data, doCollectData, param)
}

//禁用功能按钮
function disableButton(page) {
    //禁用父页面的人员选择
    parent.$id("imgSelect").lookupdisabled = true;
    switch (page) {
        case "Entity":    //禁用实例页面的所有按钮（重置，发起人指派，作废）
            deActive("ReplaceAuditor,cStepJump,cProcessCancel");
            return;
        case "Draft":     //禁用草稿页面的所有按钮（删除草稿）
            deActive("cDelete")
            return;
        case "Module":    //禁用模板页面的所有按钮（重置）
            return;
    }
}

//启用功能按钮
function enableButton(page) {
    //启用父页面的人员选择
    parent.$id("imgSelect").lookupdisabled = false;
    switch (page) {
        case "Entity":    //禁用实例页面的所有按钮（重置，发起人指派，作废）
            reActive("ReplaceAuditor,cStepJump,cProcessCancel");
            return;
        case "Draft":     //禁用草稿页面的所有按钮（删除草稿）
            reActive("cDelete")
            return;
        case "Module":    //禁用模板页面的所有按钮（重置）
            return;
    }
}

/***********************************
--------------功能函数--------------
************************************/

//重设当前步骤责任人
//mode 模式: 模板、实例
function ReplaceAuditor(mode) {
    if (sOldAuditorGUID == "") {
        return;
    }
    //选择行
    var arrTr = appGrid.frameElement.getSelected();
    if (!arrTr) {
        return;
    }

    //选择新责任人
    var sUrl = "/MyWorkflow/WF_AuditorReplace_Guide.aspx";
    var params = "mode=" + mode
			        + "&BUGUID=" + cUserBUGUID
			        + "&oldAuditorName=" + escape(sOldAuditorName)
			        + "&oldAuditorGUID=" + sOldAuditorGUID;
    var sHeight = "320px";
    var sWidth = "400px";
    if (mode == "Entity") sHeight = "260px";
    var handleResult = openMyDlg("重置责任人", sUrl, params, window, sWidth, sHeight);

    if (typeof handleResult == "undefined") {
        return;
    }

    var handleXML;

    var context = XMLDOM();
    context.loadXML(handleResult);
    //插入原责任人信息
    context.firstChild.setAttribute("oldAuditorName", XmlEncode(sOldAuditorName));
    context.firstChild.setAttribute("oldAuditorGUID", sOldAuditorGUID);
    if (mode == "Module") {
        handleXML = GetModuleXML(arrTr, context);
        //模板和选择的类型不匹配,直接提示成功
        if (handleXML === true) {
            alert("重置责任人操作已成功！"); //BUG 47140 提示信息错误 SUNFX 2009-8-10 15:13:40 END
            return;
        }
    }
    else {
        GetEntityXML(arrTr, context, "replace");
        handleXML = "<HandleResultList>" + requestData.join("") + "</HandleResultList>";
        requestData.length = 0;
    }
    
    //开启提示
    divMsg.innerText = "处理中，请稍候...";
    divMsg.style.display="";
    
    //处理返回信息
    var returnXML = oprSubmit("Replace", mode, handleXML);
    context.loadXML(returnXML);

    if (context.firstChild.getAttribute("result") == "false") {
        alert(context.firstChild.getAttribute("errormessage"));
    }
    else {
        alert("重置责任人操作已成功！");
    }
    //关闭提示    
    divMsg.style.display="none";
    
    AfterSubmit();
}

//发起人指派
function StepJump() {
    if (sOldAuditorGUID == "") {
        return;
    }
    var arrTr = appGrid.frameElement.getSelected();
    if (!arrTr) {
        return;
    }
    var boolCanJump = 1;
    for (var i = 0,j =arrTr.length; i < j; i++) {
        if (arrTr[i].StepTypeNum != "1" && arrTr[i].StepTypeNum != "2") {
            boolCanJump = -1;
            break;
        }
    }
    if (boolCanJump != 1) {
        alert("只允许对审批、会签步骤进行发起人指派操作！");
        return;
    }
    
    //校验是否多人步骤
    var NodeGUIDList = [];
    for (var i = 0,j =arrTr.length; i < j; i++) {
        NodeGUIDList.push(arrTr[i].NodeGUID);
    }
    var sURL = "/MyWorkflow/WF_Engine_XmlHttp.aspx"
    var result = GetDataFromXMLHTTP(sURL, "MULTISTEPVERIFY","" , "", NodeGUIDList.join("','"));
    if (result != "true") {
        var rowids = [];
        for (i = 0, j = arrTr.length; i < j; i++) {
            if (result.indexOf(arrTr[i].NodeGUID) > -1) {
                rowids.push(arrTr[i].cells[0].innerText);
            }
        }
        alert("序号为 " + rowids.join("，") + " 的记录为多人步骤，不允许进行发起人指派操作！");
        return;
    }
    //校验通过
    if (!confirm("确实要跳过选中流程的当前步骤，由发起人指派吗？")) {
        return;
    }
    var handleResult = "<HandleResult/>";
    var context = XMLDOM();
    context.loadXML(handleResult);
    //插入原责任人信息
    context.firstChild.setAttribute("oldAuditorName", XmlEncode(sOldAuditorName));
    context.firstChild.setAttribute("oldAuditorGUID", sOldAuditorGUID);

    var handleXML = GetEntityXML(arrTr, context,"jump");
    
    doAction("Entity","Jump"); 
}

//作废
function ProcessCancel() {
    if (sOldAuditorGUID == "") {
        return;
    }
    var arrTr = appGrid.frameElement.getSelected();
    if (!arrTr) {
        return;
    }
    //获取作废原因
    var sUrl = "/MyWorkflow/WF_ProcessCancel_Guide.aspx";
    var params = "type=" + escape("[作废-重置责任人]");
    var sHeight = "400px";
    var sWidth = "500px";
    var handleResult = openMyDlg("[作废]", sUrl, params, "", sWidth, sHeight);
    if (typeof handleResult == "undefined") return;
    var context = XMLDOM();
    context.loadXML(handleResult);
    //插入原责任人信息
    context.firstChild.setAttribute("oldAuditorName", XmlEncode(sOldAuditorName));
    context.firstChild.setAttribute("oldAuditorGUID", sOldAuditorGUID);
    var handleXML = GetEntityXML(arrTr, context,"cancel");

    doAction("Entity","Cancel");
}

//删除草稿
function DeleteDraft() {
    if (sOldAuditorGUID == "") {
        return;
    }
    var arrTr = appGrid.frameElement.getSelected();
    if (!arrTr) {
        return;
    }
    if (!confirm("确实要删除选中的草稿吗？")) {
        return;
    }
    var handleResult = "<HandleResult/>";
    var context = XMLDOM();
    context.loadXML(handleResult);
    //插入原责任人信息
    context.firstChild.setAttribute("oldAuditorName", XmlEncode(sOldAuditorName));
    context.firstChild.setAttribute("oldAuditorGUID", sOldAuditorGUID);
    var handleXML = GetDraftXML(arrTr, context);

    doAction("Draft","Delete");
}

/***********************************
----------获取选择的行的XML---------
************************************/

//获取模板XML
function GetModuleXML(arrTr, context) {
    if (!arrTr || !context) { return; }
    var enumAuditorType = {
        "chkStep": 1,
        "chkCC": 2,
        "chkBook": 4,
        "chkWatch": 8
    };
    var AuditorType = context.firstChild.getAttribute("AuditorType"); //用户选择的处理类型
    for (var i = 0; i < arrTr.length; i++) {
        if (enumAuditorType.chkStep & AuditorType && arrTr[i].AuditorType.indexOf("步骤责任人") > -1) {
            var stepNode = context.createElement("stepNode");
            stepNode.setAttribute("ProcessGUID", arrTr[i].oid);
            context.firstChild.appendChild(stepNode);
        }
        if (enumAuditorType.chkCC & AuditorType && arrTr[i].AuditorType.indexOf("抄送人") > -1) {
            var ccNode = context.createElement("ccNode");
            ccNode.setAttribute("ProcessGUID", arrTr[i].oid);
            context.firstChild.appendChild(ccNode);
        }
        if (enumAuditorType.chkBook & AuditorType && arrTr[i].AuditorType.indexOf("流程归档人") > -1) {
            var bookNode = context.createElement("bookNode");
            bookNode.setAttribute("ProcessGUID", arrTr[i].oid);
            context.firstChild.appendChild(bookNode);
        }
        if (enumAuditorType.chkWatch & AuditorType && arrTr[i].AuditorType.indexOf("监控人") > -1) {
            var watchNode = context.createElement("watchNode");
            watchNode.setAttribute("ProcessGUID", arrTr[i].oid);
            context.firstChild.appendChild(watchNode);
        }
    }
    //可能存在选择的行和类型不匹配时,没有数据需要处理
    if (context.firstChild.childNodes.length == 0) {
        return true;
    }
    return context.documentElement.xml;
}

//获取实例XML,每条记录生成一个XML,放入全局数组requestData中.
function GetEntityXML(arrTr, context,type) {    
    if (!arrTr || !context) { return; }
    for (var i = 0; i < arrTr.length; i++) {        
        context.firstChild.setAttribute("ProcessGUID", arrTr[i].oid);
        context.firstChild.setAttribute("ProcessName", arrTr[i].ProcessName);
        switch(type) 
        {
            case "replace":
                context.firstChild.setAttribute("NodeStatus", arrTr[i].NodeStatus);
                context.firstChild.setAttribute("StepTypeNum", arrTr[i].StepTypeNum);
                context.firstChild.setAttribute("NodeGUID", arrTr[i].NodeGUID);
                context.firstChild.setAttribute("StepName", arrTr[i].StepName);
                break;
            case "jump":
                context.firstChild.setAttribute("Owner", arrTr[i].Owner);
                context.firstChild.setAttribute("OwnerName", arrTr[i].OwnerName);
                context.firstChild.setAttribute("NodeGUID", arrTr[i].NodeGUID);
                context.firstChild.setAttribute("StepName", arrTr[i].StepName);
                context.firstChild.setAttribute("StepPathGUID", arrTr[i].StepPathGUID);
                break;
            case "cancel":
                context.firstChild.setAttribute("Owner", arrTr[i].Owner);
                context.firstChild.setAttribute("StepPathGUID", arrTr[i].StepPathGUID);
                break;
        }        
        context.firstChild.setAttribute("ProcessGUID", arrTr[i].oid);
        context.firstChild.setAttribute("ProcessGUID", arrTr[i].oid);
        
        requestData.push(context.documentElement.xml);
    }
}

//获取草稿XML,每条记录生成一个XML,放入全局数组requestData中.
function GetDraftXML(arrTr, context) {
    if (!arrTr || !context) { return; }
    for (var i = 0; i < arrTr.length; i++) {
        context.firstChild.setAttribute("ProcessGUID", arrTr[i].oid);
        context.firstChild.setAttribute("ProcessName", arrTr[i].ProcessName);
        requestData.push(context.documentElement.xml);
    }
}
